为什么二叉树的根结点常常是指向指针的指针

您所在的位置:网站首页 指向指针的指针 用途 为什么二叉树的根结点常常是指向指针的指针

为什么二叉树的根结点常常是指向指针的指针

2023-04-22 23:59| 来源: 网络整理| 查看: 265

因为在创造一颗树时,在申请根结点空间时,地址可能会发生变化,而这种变化是无法判断的,是系统自动发生的,单个指针就无法找到变化后的地址,所以 ,用指针的指针,找到变化后的地址。

一、为什么二叉树的根结点常常是指向指针的指针

因为在创造一颗树时,在申请根结点空间时,地址可能会发生变化,而这种变化是无法判断的,是系统自动发生的,单个指针就无法找到变化后的地址,所以 ,用指针的指针,找到变化后的地址。当然 如果你在创造一颗树前,就已经初始化分配了根结点的空间,那就不用指针的指针,直接用一个指针就行了。

它是一种C语言式的标准做法。

节点需要两重指针,一重是节点本身动态更改数据的需要,另一重是分配与操作堆内存数据的需要。

至于是不是一定要做成指针的指针形式,取决于节点数据是直接手动管理内存,这种可以指针的指针,效率最高。还是封装为某个结构的内部成员变量,开销略大一点,就只是指针的形式,好控制,使用方便。用智能指针的话,实际也是属于后者。

二叉树的建立中:

t=(BiTtree*)malloc(sizeof(BiTtree)); t->data=d; CreateBiTree(t->left,x); CreateBiTree(t->right,x);;

其中t=(tree*)malloc(sizeof(tree));

改变了指针的指向所以指针的指针,或者指针的引用

void CreateBiTree(BiTtree *&t,char x)

1

附上代码

#include

using namespace std;

struct BiTtree{

    char data;

    BiTtree *left,*right;

};

void CreateBiTree(BiTtree *&t,char x){

//在函数调用时用指针或者引用做参数,表示把变量的地址传递给子函数,

//但是子函数只能修改指针所指变量的值,并不能修改指针的指向。

//如果想要修改指针的指向,就要用指针的指针,或者指针的引用。

    char d;

    scanf(“%c”,&d);

    if(d==x){

       t=NULL;

    }

    else{

       t=(BiTtree*)malloc(sizeof(BiTtree));

       t->data=d;

       CreateBiTree(t->left,x);

       CreateBiTree(t->right,x);

    }

}

void printtree(BiTtree *t){

    if(t){

       printf(“%c “, t->data);

       printtree(t->left);

       printtree(t->right);

    }

}

int main(){

    BiTtree *t;

    CreateBiTree(t,’#’);

    printtree(t);

    return 0;

}

延伸阅读:

二、树

树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:

有且仅有一个特定的称为根(Root)的结点; 当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、…… 为什么二叉树的根结点常常是指向指针的指针Tn,其中每一个集合本身又是一棵树,并且称为根的子树。

此外,树的定义还需要强调以下两点:

n>0时根结点是唯一的,不可能存在多个根结点,数据结构中的树只能有一个根结点。 m>0时,子树的个数没有限制,但它们一定是互不相交的。 开发者生产力工具大全

从人工到自动化,从重复到创新,技术演进的历程中,都伴随着开发者工具类产品的发展,所以这里整理近几年口碑良好,使用广泛的22款程序员生产力工具。

1.研发项目管理与协作:PingCode

优点:让工作推进、进度/问题追踪、团队协作变得更简单,2021年研发项目管理榜单TOP1(36Kr)。

简介:覆盖研发全生命周期,广泛用于需求、版本、项目(敏捷/kanban/瀑布)、测试、缺陷、文档、效能等环节管理与协作。并且集成github、gitlab、jinkens等主流工具,支持私有部署、在线等多种部署使用方式。

【教程/官网】

2.任务管理/甘特图制作工具:Worktile

优点:功能成熟、性价比高、国内市场占有率最高的团队任务工具;

简介:在功能上Worktile 是一个工具集合,它具备OKR目标管理、项目管理、项目集管理、项目计划、项目风险、项目成本管理、企业网盘、审批、简报等能力。并且具备强大的自定义能力,能够配置出符合各种项目团队的流程、表单、字段、数据报表,以及具备丰富的模板市场。

【官网/教程】

3.分布式版本控制系统:Git

优点:分布式开发、速度快、灵活

简介:Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

【教程/官网】

4.数据库管理工具:Navicat

优点:高效、安全,最好用的数据库管理工具。

简介:“Navicat”是一套可创建多个连接的数据库管理工具,用以方便管理 MySQL、Oracle、PostgreSQL、SQLite、SQL Server、MariaDB 和 MongoDB 等不同类型的数据库,它与阿里云、腾讯云、华为云、Amazon RDS、Amazon Aurora、Amazon Redshift、Microsoft Azure、Oracle Cloud 和 MongoDB Atlas等云数据库兼容。

【官网/教程】

其余工具可通过《神级程序员都用什么工具?程序员生产力工具大全 》查看,以上均整理自该文章。

以上就是关于为什么二叉树的根结点常常是指向指针的指针的内容希望对大家有帮助。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3